package com.yuanjin.util;

import java.util.ArrayList;
import java.util.Iterator;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import android.content.Context;
import android.os.Handler;
import android.os.Message;
import android.util.Log;

import com.thinkland.sdk.android.DataCallBack;
import com.thinkland.sdk.android.JuheData;
import com.thinkland.sdk.android.Parameters;
import com.yuanjin.models.Map_Petrol;
import com.yuanjin.models.Map_Station;

public class Map_StationData {
	private Context mcontext;
	private Handler mhandler = null;

	public Map_StationData(Context context, Handler handler) {
		this.mcontext = context;
		this.mhandler = handler;
	}

	/**
	 * @param context
	 * @param city
	 *            -城市名
	 */
	public void getStationData(double lat, double lon, int distance) {
		// this.context = context;
		/**
		 * 请不要添加key参数.
		 */
		Parameters params = new Parameters();
		// params.add("city", city);
		params.add("lat", lat);
		params.add("lon", lon);
		params.add("r", distance);
		// params.add("lat", 31.677132);
		// params.add("lon", 121.538123);
		// params.add("r", 3000);
		Log.e("stationdata", "进入查询方法了");
		/**
		 * 请求的方法 参数: 第一个参数 当前请求的context 第二个参数 接口id 第三个参数 接口请求的url 第四个参数 接口请求的方式
		 * 第五个参数 接口请求的参数,键值对com.thinkland.sdk.android.Parameters类型; 第六个参数
		 * 请求的回调方法,com.thinkland.sdk.android.DataCallBack;
		 * 
		 */
		JuheData.executeWithAPI(mcontext, 7, "http://apis.juhe.cn/oil/local",
				JuheData.GET, params, new DataCallBack() {

					/**
					 * 请求成功时调用的方法, statusCode为http状态码,responseString为请求返回数据.
					 */
					@Override
					public void onSuccess(int statusCode, String responseString) {
						Log.e("responseString", "responseString-->"
								+ responseString);
						Log.e("test", "statusCode=" + statusCode + "");
						if (statusCode == 200) {
							ArrayList<Map_Station> list = parse(responseString);
							if (list != null && mhandler != null) {
								Message msg = Message.obtain(mhandler, 0x01,
										list);
								msg.sendToTarget();
								Log.e("test", "进入onSuccess的if判断了");
							} else {
								if (mhandler != null) {
									Message msg = Message.obtain(mhandler,
											0x02, statusCode);
									msg.sendToTarget();
								}

							}
						}
					}

					/**
					 * 请求完成时调用的方法,无论成功或者失败都会调用.
					 */
					@Override
					public void onFinish() {
						// TODO Auto-generated method stub

					}

					/**
					 * 请求失败时调用的方法,statusCode为http状态码,throwable为捕获到的异常
					 * statusCode:30002 没有检测到当前网络. 30003 没有进行初始化. 0
					 * 未明异常,具体查看Throwable信息. 其他异常请参照http状态码.
					 */
					@Override
					public void onFailure(int statusCode,
							String responseString, Throwable throwable) {
						// TODO Auto-generated method stub

					}
				});
	}

	private ArrayList<Map_Station> parse(String str) {
		ArrayList<Map_Station> list = null;
		try {
			JSONObject json = new JSONObject(str);
			int code = json.getInt("error_code");
			if (code == 0) {
				list = new ArrayList<Map_Station>();
				JSONArray arr = json.getJSONObject("result").getJSONArray(
						"data");
				for (int i = 0; i < arr.length(); i++) {
					JSONObject dataJson = arr.getJSONObject(i);
					Map_Station sInfo = new Map_Station();
					sInfo.setAddr(dataJson.getString("address"));
					sInfo.setArea(dataJson.getString("areaname"));
					sInfo.setBrand(dataJson.getString("brandname"));
					sInfo.setDistance(dataJson.getInt("distance"));
					sInfo.setLat(dataJson.getDouble("lat"));
					sInfo.setLon(dataJson.getDouble("lon"));
					sInfo.setName(dataJson.getString("name"));

					// 解析价格price
					JSONObject priceJson = dataJson.getJSONObject("price");
					ArrayList<Map_Petrol> pricelist = new ArrayList<Map_Petrol>();
					Iterator<String> priceI = priceJson.keys();
					while (priceI.hasNext()) {
						Map_Petrol p = new Map_Petrol();
						String key = priceI.next();// Returns the next element
													// in the iteration.
						String value = priceJson.getString(key);
						p.setType(key.replace("E", "") + "#");
						p.setPrice(value + "元/升");
						pricelist.add(p);
					}
					sInfo.setPriceList(pricelist);

					// 解析价格gastprice，同上
					JSONObject gastpriceJson = dataJson
							.getJSONObject("gastprice");
					ArrayList<Map_Petrol> gastpriceList = new ArrayList<Map_Petrol>();
					Iterator<String> gastpriceI = gastpriceJson.keys();
					while (gastpriceI.hasNext()) {
						Map_Petrol p = new Map_Petrol();
						String key = gastpriceI.next();
						String value = gastpriceJson.getString(key);
						// Log.e("json解析中的数据",
						// "json解析中的数据"+key+":"+value+"元/升");
						p.setType(key);
						p.setPrice(value + "元/升");
						gastpriceList.add(p);
					}
					sInfo.setGastPriceList(gastpriceList);

					list.add(sInfo);
				}
			} else {
				if (mhandler != null) {
					Message msg = Message.obtain(mhandler, 0x02, code);
					msg.sendToTarget();
				}

			}
		} catch (JSONException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return list;

	}
}
